package com.example.md.exception;

import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import com.example.md.common.Result;

@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

    /**
     * 处理请求参数校验失败异常
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
        // 获取第一个校验错误信息
        FieldError fieldError = ex.getBindingResult().getFieldError();
        String errorMessage = fieldError != null ? fieldError.getField() + " " + fieldError.getDefaultMessage() : "参数校验失败";

        // 返回自定义的Result失败响应
        return Result.failed(errorMessage);
    }

     /**
     * 系统抛出的异常
     * @param ex
     * @return 固定异常码10002 和 异常信息封装的ResultData对象
     */
    @ExceptionHandler(value = Exception.class)
    public Result<?> handlerException(Exception ex) {
        // 对所以其他异常，统一异常码为10002，并封装
        return Result.failed(500, ex.getMessage());
    }
}